package com.charlotte;

import java.io.*;
import java.net.SocketTimeoutException;
import java.net.UnknownHostException;
import java.util.Calendar;
import java.util.Scanner;

/**
 *
 * @author law
 */
public class IpDesktop 
{
    
    public static void main(String... args) throws IOException, Exception 
    {
        PropertiesApplication propiedades = new PropertiesApplication("/com/charlotte/URIS.properties");
        try(PrintWriter print = new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out))))
        {
            try(Scanner scan = new Scanner(new BufferedReader(new InputStreamReader(System.in))))
            {
                scan.useDelimiter(String.valueOf((char)10));
                String opcion;
                print.println("!!!!Bienvenido¡¡¡¡");
                do
                {
                    print.println("¿Qué desea hacer?");
                    print.print("Saber IP[i/I] -- Reiniciar Modem [r/R] -- Salir [s/S] = ");
                    print.flush();
                    opcion = scan.next();
                    if(opcion.equalsIgnoreCase("i"))
                        mostrarIp(print,propiedades.getPropiedad("URI-IP"));
                    else if(opcion.equalsIgnoreCase("r"))
                        reiniciarModem(print,scan,propiedades.getPropiedad("URI-MODEM"));
                    else if(opcion.equalsIgnoreCase("s"))
                         print.println("!!!!Adios¡¡¡¡");
                    else
                         print.println("!!!!Opción no válida¡¡¡¡");
                }while(!opcion.equalsIgnoreCase("s"));
            }
        }
        System.exit(0);
    }
    
    private static void mostrarIp(PrintWriter print, String uri)
    {
        try
        {
            print.printf("%1$td/%1$tm/%1$ty %1$tI:%1$tM:%1$tS %1$tp -- Consultando web service...%2$c",Calendar.getInstance(),(char)10);
            print.flush();
            print.println("Tu ip es = "+ new Ip(uri).get());
            print.printf("%1$td/%1$tm/%1$ty %1$tI:%1$tM:%1$tS %1$tp -- Consulta terminada.%2$c",Calendar.getInstance(),(char)10);
            print.flush();
        }
        catch(Exception e)
        {
            imprimirError(e,print);
        }
    }
    
    private static void reiniciarModem(PrintWriter print, Scanner scan, String uri)
    {
        try
        {
            print.print("Password (sí no lo necesita, sólo presione \"enter\") = ");
            print.flush();
            String password = scan.next();
            print.printf("%1$td/%1$tm/%1$ty %1$tI:%1$tM:%1$tS %1$tp --Reiniciando Modem...%2$c",Calendar.getInstance(),(char)10);
            print.flush();
            print.println("Estado = "+new Reboot(uri,password).get());
            print.printf("%1$td/%1$tm/%1$ty %1$tI:%1$tM:%1$tS %1$tp --Terminado.%2$c",Calendar.getInstance(),(char)10);
            print.flush();
        }
        catch(Exception e)
        {
            imprimirError(e,print);
        }
    }
    
    private static void imprimirError(Exception e, PrintWriter print)
    {
        if(e instanceof UnknownHostException || e instanceof FileNotFoundException)
        {
            print.println("Servicio no encontrado. Consejo: verifique su conección a internet.");
            print.flush();
        }
        else if(e instanceof SocketTimeoutException)
        {
            print.println("El servidor tarda en contestar o el tiempo de lectura a expirado, intente más tarde.");
            print.flush();
        }
        else if(e instanceof IOException)
        {
            print.println("Error crítico de entrada/salida.");
            print.flush();
        }
        else
        {
            print.println("Error sin procesar.");
            print.flush();
        }
    }
    
}